/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package faac.modules.chat;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Iterator;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedQueue;
import faac.protocol.IcqProtocol;
import faac.util.Log;
import sun.util.logging.resources.logging;

/**
 *
 * @author (с)~F@@C~
 * 2010 год
 *  Умный бот для чата)))))
 */
public class Bot implements Runnable {
    public String NICK = "бот";
    public String ALT_NICK="бот;bot";
    private Thread th;
    int sleepAmount = 1000;
    long cTime=System.currentTimeMillis(); //Время последнего сообщения, для определения паузы
    public ChatServer srv;
    public ConcurrentLinkedQueue <MsgElement> mq;
    public ConcurrentHashMap <String,Integer> uins;



    /** Creates a new instance of RobAdmin */
    public Bot(ChatServer s) {
        srv = s;
        mq = new ConcurrentLinkedQueue();
        uins = new ConcurrentHashMap();
        uins.put("0",0);
    }

    /**
     * Добавление в очередь нового задания
     */
    public void parse(IcqProtocol proc, String uin, String msg, int room){
        cTime = System.currentTimeMillis();
        mq.add(new MsgElement(msg,uin,proc,room));
    }



    private void parse(){
        if (mq.isEmpty()) return;
        MsgElement ms = mq.poll();

}


    public void say(String m, int room){
        cTime = System.currentTimeMillis();
        String s = NICK + ": " + m;
        Log.getLogger(srv.getName()).info(s);
        srv.us.db.log(0,"admin","OUT", s, room);
        srv.cq.addMsg(s,"",room);
    }



    /**
     * Проверка на совпадение слов в сообщении
     */
    public boolean test(String msg, String[] testStr){
        for(int i=0;i<testStr.length;i++){
            if(msg.toLowerCase().indexOf(testStr[i])>=0) return true;
        }
        return false;
    }

    /**
     * Проверка на наличие имени админа
     */
    public boolean testName(String s){
        return test(s,ALT_NICK.split(";"));
    }

public void start(){
        th = new Thread(this);
        th.setPriority(Thread.NORM_PRIORITY);
        th.start();
    }

    public synchronized void stop() {
        th = null;
        notify();
    }

    public void run() {
        Thread me = Thread.currentThread();
        while (th == me) {
            parse();
            try {
                th.sleep(sleepAmount);
            } catch (InterruptedException e) { break; }
        }
        th=null;
    }
}
